#ifndef ELTOOLCLASS_H
#define ELTOOLCLASS_H
#include <QString>
#include <QTextCodec>
#include "tool.h"

//查表法
unsigned int crc16_modbus(QByteArray data_value,unsigned int data_length);

QString 过滤非HEX字符(QString ss);
QByteArray HEX字符串转HEX数组(QString hexStr);
quint8 两HEX字符转1字节数(quint8 a,quint8 b);
QString QBtAy转HEX字符串(QByteArray Str,int 是否有空格);

//生成最终的要发送的命令
QByteArray HEX字符串转发送命令(QString Str);





typedef struct
{
    uint8_t 样机地址;//01
    uint8_t 功能码03;//03
    uint8_t 功能D0;//D0
    uint8_t 错误区0[4];//区负1
    uint8_t 错误区1[4];//区0
    char 错误ASCII[14*4];//1~14
    uint8_t 电压A[4];//15
    uint8_t 电压B[4];//16
    uint8_t 电压C[4];//17
    uint8_t 未知18[4];
    uint8_t 电流A[4];//19
    uint8_t 电流B[4];//20
    uint8_t 电流C[4];//21
    uint8_t 未知22[4];
    uint8_t 未知23[4];
    uint8_t 未知24[4];
    uint8_t 未知25[4];
    uint8_t 未知26[4];
    uint8_t 未知27[4];
    uint8_t 未知28[4];
    uint8_t 未知29[4];
    uint8_t 未知30[4];
    uint8_t 功率A[4];//31
    uint8_t 功率B[4];//32
    uint8_t 功率C[4];//33
    uint8_t 未知34[4];//34
    uint8_t 无功A[4];//35
    uint8_t 无功B[4];//36
    uint8_t 无功C[4];//37
    uint8_t 未知38[4];//38
    uint8_t 功因A[4];//39
    uint8_t 功因B[4];//40
    uint8_t 功因C[4];//41
    uint8_t 未知42[4];//42
    uint8_t 漏电流[4];//43
    uint8_t 未知44[4];//44
    uint8_t 未知45[4];//45
    uint8_t 未知46[4];//46
    uint8_t 温度1[2];//int16_t 温度1;会点用3个字节，后续的int16_t 温度2;开始又是正常占用2个字节
    uint8_t 温度2[2];//47
    uint8_t 温度3[2];
    uint8_t 温度4[2];//48
    uint8_t 温度5[2];
    uint8_t 温度6[2];//49
    uint8_t 温度7[2];
    uint8_t 温度8[2];//50
    uint8_t data_crcL;
    uint8_t data_crch;

}接收帧03D0;


typedef struct
{
    uint8_t 样机地址;//01
    uint8_t 功能码03;//03
    uint8_t 功能D0;//D0
    uint8_t 错误区0[4];//区负1
    uint8_t 错误区1[4];//区0
    char 错误ASCII[14*4];//1~14
    int32_t 电压A;//15
    int32_t 电压B;//16
    int32_t 电压C;//17
    int32_t 未知18;
    int32_t 电流A;//19
    int32_t 电流B;//20
    int32_t 电流C;//21
    int32_t 未知22;
    int32_t 未知23;
    int32_t 未知24;
    int32_t 未知25;
    int32_t 未知26;
    int32_t 未知27;
    int32_t 未知28;
    int32_t 未知29;
    int32_t 未知30;
    int32_t 功率A;//31
    int32_t 功率B;//32
    int32_t 功率C;//33
    int32_t 未知34;//34
    int32_t 无功A;//35
    int32_t 无功B;//36
    int32_t 无功C;//37
    int32_t 未知38;//38
    int32_t 功因A;//39
    int32_t 功因B;//40
    int32_t 功因C;//41
    int32_t 未知42;//42
    int32_t 漏电流;//43
    int32_t 未知44;//44
    int32_t 未知45;//45
    int32_t 未知46;//46
    int16_t 温度1;
    int16_t 温度2;//47
    int16_t 温度3;
    int16_t 温度4;//48
    int16_t 温度5;
    int16_t 温度6;//49
    int16_t 温度7;
    int16_t 温度8;//50
    uint8_t data_crcL;
    uint8_t data_crch;

}帧03D0重排struct;

void 重排03D0函数(接收帧03D0 帧03D0,帧03D0重排struct *帧03D0重排);

#endif // ELTOOLCLASS_H
